"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const vue_1 = require("vue");
const fade_in_expand_transition_1 = __importDefault(require("../../fade-in-expand-transition"));
const _mixins_1 = require("../../../_mixins");
const SlotMachineNumber_1 = __importDefault(require("./SlotMachineNumber"));
const index_cssr_1 = __importDefault(require("./styles/index.cssr"));
exports.default = (0, vue_1.defineComponent)({
    name: 'BaseSlotMachine',
    props: {
        clsPrefix: {
            type: String,
            required: true
        },
        value: {
            type: [Number, String],
            default: 0
        },
        max: {
            type: Number,
            default: undefined
        },
        appeared: {
            type: Boolean,
            required: true
        }
    },
    setup(props) {
        (0, _mixins_1.useStyle)('BaseSlotMachine', index_cssr_1.default, (0, vue_1.toRef)(props, 'clsPrefix'));
        const oldValueRef = (0, vue_1.ref)();
        const newValueRef = (0, vue_1.ref)();
        const numbersRef = (0, vue_1.computed)(() => {
            if (typeof props.value === 'string')
                return [];
            if (props.value < 1)
                return [0];
            const numbers = [];
            let value = props.value;
            if (props.max !== undefined) {
                value = Math.min(props.max, value);
            }
            while (value >= 1) {
                numbers.push(value % 10);
                value /= 10;
                value = Math.floor(value);
            }
            numbers.reverse();
            return numbers;
        });
        (0, vue_1.watch)((0, vue_1.toRef)(props, 'value'), (value, oldValue) => {
            if (typeof value === 'string') {
                newValueRef.value = undefined;
                oldValueRef.value = undefined;
            }
            else {
                if (typeof oldValue === 'string') {
                    newValueRef.value = value;
                    oldValueRef.value = undefined;
                }
                else {
                    newValueRef.value = value;
                    oldValueRef.value = oldValue;
                }
            }
        });
        return () => {
            const { value, clsPrefix } = props;
            return typeof value === 'number' ? ((0, vue_1.h)("span", { class: `${clsPrefix}-base-slot-machine` },
                (0, vue_1.h)(vue_1.TransitionGroup, { name: "fade-up-width-expand-transition", tag: "span" }, {
                    default: () => numbersRef.value.map((number, i) => ((0, vue_1.h)(SlotMachineNumber_1.default, { clsPrefix: clsPrefix, key: numbersRef.value.length - i - 1, oldOriginalNumber: oldValueRef.value, newOriginalNumber: newValueRef.value, value: number })))
                }),
                (0, vue_1.h)(fade_in_expand_transition_1.default, { key: "+", width: true }, {
                    default: () => props.max !== undefined && props.max < value ? ((0, vue_1.h)(SlotMachineNumber_1.default, { clsPrefix: clsPrefix, value: "+" })) : null
                }))) : ((0, vue_1.h)("span", { class: `${clsPrefix}-base-slot-machine` }, value));
        };
    }
});
